package zkk.com.mengqu.service;

import java.util.List;

import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Path;
import retrofit2.http.Query;
import rx.Observable;
import zkk.com.mengqu.models.Address;
import zkk.com.mengqu.models.Banner;
import zkk.com.mengqu.models.Food;
import zkk.com.mengqu.models.FoodType;
import zkk.com.mengqu.models.KitchenDetail;
import zkk.com.mengqu.models.Kitchen;
import zkk.com.mengqu.models.KitchenList;
import zkk.com.mengqu.models.User;
import zkk.com.mengqu.models.UserInfo;

/**
 * Created by Administrator on 2016/6/27 0027.
 */
public interface ApiService {

    /**
     * 按指定的经纬度找出指定的距离内的附近厨房
     * @param apiId api类型
     * @param latitude 经度
     * @param longitude 纬度
     * @param distance 距离
     * @return 指定的距离内的附近厨房列表
     */
    @FormUrlEncoded
    @POST("cengceng/index.php/")
    Observable<KitchenList> getNearByKitchen(@Field("mod") String apiId,
                                             @Field("latitude") double latitude,
                                             @Field("longitude") double longitude,
                                             @Field("distance") String distance);


    /**
     * 获取指定id的kitchen信息
     * @param apiId api类型
     * @param kid kitchenId
     * @return 指定厨房的信息
     */
    @FormUrlEncoded
    @POST("cengceng/index.php/")
    Observable<Kitchen> getKitchen(@Field("mod") String apiId, @Field("kid") int kid);

    /**
     * 通过账号密码登录
     * @param apiId api类型
     * @param account 用户账号
     * @param password 用户密码
     * @return 返回指定账号的信息
     */
    @FormUrlEncoded
    @POST("cengceng/index.php/")
    Observable<User> login(@Field("mod") String apiId, @Field("account") String account, @Field("password") String password);

    /**
     * 用户注册
     * @param apiId api类型
     * @param account 用户账号
     * @param password 用户密码
     * @return
     */
    @FormUrlEncoded
    @POST("cengceng/index.php/")
    Observable<User> register(@Field("mod") String apiId, @Field("account") String account, @Field("password") String password);

    /**
     * 新建厨房
     * @param apiId API类型
     * @param uid 用户id
     * @param token 用户token
     * @param name 厨房名字
     * @param latitude 经度
     * @param longitude 纬度
     * @param type
     * @param addr 地址
     * @param service
     * @param service_price
     * @param head_path
     * @param profile_picture
     * @return
     */
    @FormUrlEncoded
    @POST("cengceng/index.php")
    Observable<KitchenDetail> newKitchen(@Field("mod") String apiId,
                                         @Field("uid") String uid,
                                         @Field("token") String token,
                                         @Field("name") String name,
                                         @Field("latitude") String latitude,
                                         @Field("longitude") String longitude,
                                         @Field("type") String type,
                                         @Field("addr") String addr,
                                         @Field("service") String service,
                                         @Field("service_price") String service_price,
                                         @Field("head_path") String head_path,
                                         @Field("profile_picture") String profile_picture);

    /**
     * 更新用户信息
     * @param apiId
     * @param uid
     * @param token
     * @param name
     * @param sex
     * @param addr
     * @param head
     * @return
     */
//    @FormUrlEncoded
//    @POST("cengceng/index.php")
//    Observable<UserInfo> updateUser(@Field("mod") String apiId,
//                                    @Field("uid") String uid,
//                                    @Field("token") String token,
//                                    @Field("name") String name,
//                                    @Field("sex") String sex,
//                                    @Field("addr") String addr,
//                                    @Field("head") String head);


    @FormUrlEncoded
    @POST("/user/register")
    Observable<User> register(@Field("phone") String phone, @Field("password") String password);

    @FormUrlEncoded
    @POST("/user/login")
    Observable<User> login(@Field("phone") String phone, @Field("password") String password);

    @POST("/user/login1")
    Call<User> login(@Body User user);

    @POST("/user/updateUser")
    Call<User> updateUser(@Body User user);

    @GET("/user/{uid}/address")
    Observable<List<Address>> getAddresses(@Path("uid")Integer uid);

    @GET("/user/{uid}/address/{aid}")
    Observable<Address> getAddress(@Path("uid") Integer uid, @Path("aid") Integer aid);

    @PUT("/user/updateAddress")
    Observable<Address> updateAddress(@Body Address address);

    @FormUrlEncoded
    @POST("/user/updateIcon")
    Observable<User> updateIcon(@Field("uid") Integer uid, @Field("icon") String icon);

    @FormUrlEncoded
    @POST("/kitchen/nearKitchen/")
    Observable<KitchenList> getNearByKitchen1(@Field("latitude") double latitude,
                                             @Field("longitude") double longitude,
                                             @Field("distance") int distance);


    @GET("/kitchen/{kid}")
    Observable<KitchenDetail> getKitchen(@Path("kid") int kid);

    @GET("/kitchen/{kid}/food")
    Observable<List<Food>> getFoodOfKitchen(@Path("kid") int kid);

    @GET("/banner")
    Observable<List<Banner>> getBanners();

    @GET("/allType")
    Observable<List<FoodType>> getAllType();
}
